सबसे पहले यह देखें @AndrewThompson की बुद्धिमानी भरी सलाह:
यहां इसका अर्थ समझने के लिए कुछ उपयोगी विषय हैं:
- नॉन रिसाइजेबल विंडो बॉर्डर और पोजीशनिंग
- क्या मुझे जावा स्विंग में सेट (पसंदीदा|अधिकतम|न्यूनतम)आकार विधियों के उपयोग से बचना चाहिए?
- नेस्टेड लेआउट उदाहरण
- स्विंग GUI में व्हाइट स्पेस प्रदान करनाए>
आप setLocation()
. जैसी विधियों का उपयोग देखेंगे , setBounds()
या setSize()
अत्यधिक हतोत्साहित किया जाता है। हालांकि मैंने रूपों को अनुकूलित करने की अनुमति देने के लिए आवेदन करने से पहले इस दृष्टिकोण को देखा है। लेकिन विशिष्ट (x, y) निर्देशांक और निश्चित (चौड़ाई, ऊंचाई) के बजाय आप ग्रिडबैगलेआउट
. मान लें कि आपके पास इस तरह की एक टेबल है:
मैं डीबी से डेटा लपेटने के लिए कक्षा के साथ सबसे पहले शुरू करूंगा:
public class Data {
private String componentType, text;
private int column, row, width, height, weightX, weightY;
public Data(String componentType, int column, int row, int width, int height
,int weightX, int weightY, String text) {
this.componentType = componentType;
this.column = column;
this.row = row;
this.width = width;
this.height = height;
this.weightX = weightX;
this.weightY = weightY;
this.text = text;
}
// getters and setters here
}
चूंकि डेटाबेस कॉल में समय लगता है, इसलिए आपको SwingWorker<का उपयोग करने पर विचार करना होगा। /ए> बैकग्राउंड थ्रेड में डेटाबेस कॉल (समय लेने वाला कार्य) करने के लिए और ईवेंट डिस्पैच थ्रेड ।
ऐसा कहने के बाद आपके पास कुछ ऐसा हो सकता है:
public class Demo {
private JPanel content;
private JFrame frame;
private void createAndShowGUI() {
content = new JPanel(new GridBagLayout());
SwingWorker<Void, Data> worker = new SwingWorker<Void, Data>() {
@Override
protected Void doInBackground() {
try{
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","password");
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery("select * from TableName");
while(rs.next()){
String componentType = rs.getString("component");
int column = rs.getInt("x");
int row = rs.getInt("y");
int width = rs.getInt("width");
int height = rs.getInt("height");
int weightx = rs.getInt("weightx");
int weighty = rs.getInt("weighty");
String text = rs.getString("text");
Data data = new Data(componentType, column, row, width, height
,weightx, weighty, text);
publish(data);
}
rs.close();
stat.close();
con.close();
} catch(Exception e) {
System.out.println(e);
}
return null;
}
@Override
protected void process(List<Data> chunks) {
for(Data data : chunks) {
JComponent component = null;
if(data.getComponentType().equalsIgnoreCase("JTextField")) {
component = new JTextField(data.getText());
}
if(data.getComponentType().equalsIgnoreCase("JComboBox")) {
component = new JComboBox();
}
if(data.getComponentType().equalsIgnoreCase("JLabel")) {
component = new JLabel(data.getText());
}
if(component != null) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = data.getColumn();
constraints.gridy = data.getRow();
constraints.gridwidth = data.getWidth();
constraints.gridheight = data.getHeight();
constraints.weightx = data.getWeightX();
constraints.weighty = data.getWeightY();
constraints.anchor = GridBagConstraints.WEST;
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(8,8,8,8);
content.add(component, constraints);
}
}
}
@Override
protected void done() {
frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
};
worker.execute();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().createAndShowGUI();
}
});
}
}
और आपको कुछ इस तरह दिखाई देगा: