2016-07-01 23 views
6

मैं जावा स्विंग के साथ निम्नलिखित जीयूआई बनाना चाहता हूं।मैं जावा स्विंग में निम्नलिखित जीयूआई कैसे बना सकता हूं?

GUI I want to have

जब से मैं जावा स्विंग के साथ पर्याप्त अनुभव नहीं कर रहा हूँ, मुझे यकीन है कि कैसे वास्तव में जीयूआई पुन: बनाने के लिए नहीं कर रहा हूँ।

मैं GridLayout जो इस तरह दिखता है का उपयोग कर की कोशिश की है:

GridLayout

मैं अपने अनुभवहीनता के कारण अन्य LayoutManagers लेकिन कोशिश की है, मैं कुछ भी नहीं मिल सका और भी दूर से जीयूआई मैं चाहता हूँ जैसी प्राप्त।

मुझे शायद ग्रिडबैगआउट का उपयोग करना होगा, लेकिन मैंने कोशिश की है और बस कुछ भी करने में सक्षम नहीं था। मुझे यकीन नहीं है कि वास्तव में ग्रिडबैगलाउट का उपयोग कैसे करें, खासकर जब आवश्यक कॉलम की मात्रा (2, 2 और फिर 3) का भिन्नता है।

import java.awt.*; 
import javax.swing.*; 

public class GUITest extends JFrame { 

public GUITest() { 
    super("Testing Title"); 
    Container pane = getContentPane(); 

    pane.setLayout(new GridLayout(3,1)); 

    pane.add(getHeader()); 
    pane.add(getTextArea()); 
    pane.add(getButtonPanel()); 

} 

public JComponent getHeader() { 
    JPanel labelPanel = new JPanel(); 
    labelPanel.setLayout(new GridLayout(1,2)); 
    labelPanel.setSize(getPreferredSize()); 

    JLabel labelLocal = new JLabel("Left value: ", JLabel.CENTER); 
    JLabel labelDB = new JLabel("Right value: ", JLabel.CENTER); 

    labelPanel.add(labelLocal); 
    labelPanel.add(labelDB); 

    return labelPanel; 
} 

public JComponent getTextArea() { 
    JPanel textPanel = new JPanel(); 
    textPanel.setLayout(new GridLayout(1,2,5,0)); 

    JTextArea testTextArea = new JTextArea(); 
    testTextArea.setEditable(false); 
    JScrollPane sp1 = new JScrollPane(testTextArea); 

    JTextArea testTextArea2 = new JTextArea(); 
    JScrollPane sp2 = new JScrollPane(testTextArea2); 
    testTextArea2.setEditable(false); 

    testTextArea.setText("Hello Hello Hello\nTesting!\ntesterino\ntesteroni"); 
    testTextArea2.setText("Hello Hello Hello\nTesting!\ntest\nABC123\ncdef123\nhijk123"); 

    textPanel.add(sp1); 
    textPanel.add(sp2); 
    return textPanel; 
} 

public JComponent getButtonPanel() { 
    JPanel inner = new JPanel(); 
    inner.setLayout(new FlowLayout((FlowLayout.CENTER),0,100)); 
    inner.add(new JButton("Do something")); 
    inner.add(new JButton("Do something different")); 
    inner.add(new JButton("Do something even more different")); 
    return inner; 
} 

public static void main(String[] args) { 
    GUITest e = new GUITest(); 
    e.setSize(700, 500); 
    e.setVisible(true); 
    e.setResizable(false); 
    e.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    e.setLocationRelativeTo(null); 
} 
} 

मैं समर्थन के किसी भी प्रकार के लिए आभारी हूँ:

यहाँ दूसरा जीयूआई बनाने के लिए इस्तेमाल किया कोड है!

+0

आप इस्तेमाल कर सकते हैं 'MigLayout' है। यह आसान है –

+1

नेटबीन्स आईडीई का जीयूआई संपादक मेरा दृष्टिकोण होगा। चूंकि यह कोड व्यापार तर्क की तुलना में वास्तव में दिलचस्प नहीं है। इसके अलावा संपत्तियों और कोशिश करने के लिए प्रस्तुत किया जाता है। –

+2

@JoopEggen मुझे समझ में नहीं आता कि आप क्या कहने की कोशिश कर रहे हैं .... ऐसा लगता है कि दो चीजें हैं लेकिन आप एक – taclight

उत्तर

5

यहाँ सिर्फ कुछ छोटे परिवर्तन के साथ अपने कोड :)

 import java.awt.*; 
    import javax.swing.*; 

    public class GUITest extends JFrame { 

     public GUITest() { 

       super("Testing Title"); 
       Container pane = getContentPane(); 
       pane.setLayout(new BorderLayout());//Modified Layout to BorderLayout 
       pane.add(getHeader(),BorderLayout.NORTH); //BorderLayout.NORTH 
       pane.add(getTextArea(),BorderLayout.CENTER);//BorderLayout.CENTER 
       pane.add(getButtonPanel(),BorderLayout.SOUTH);//BorderLayout.SOUTH 

     } 

     public JComponent getHeader() { 

      JPanel labelPanel = new JPanel(); 
      labelPanel.setLayout(new GridLayout(1,2)); 
      labelPanel.setSize(getPreferredSize());  
      JLabel labelLocal = new JLabel("Left value: ", JLabel.CENTER); 
      JLabel labelDB = new JLabel("Right value: ", JLabel.CENTER); 
      labelPanel.add(labelLocal); 
      labelPanel.add(labelDB); 
      return labelPanel; 

     } 

    public JComponent getTextArea() { 

      JPanel textPanel = new JPanel();  
      textPanel.setLayout(new GridLayout(1,2,5,0)); 
      JTextArea testTextArea = new JTextArea(); 
      testTextArea.setEditable(false); 
      JScrollPane sp1 = new JScrollPane(testTextArea); 
      JTextArea testTextArea2 = new JTextArea(); 
      JScrollPane sp2 = new JScrollPane(testTextArea2); 
      testTextArea2.setEditable(false); 
      testTextArea.setText("Hello Hello Hello\nTesting!\ntesterino\ntesteroni"); 
      testTextArea2.setText("Hello Hello Hello\nTesting!\ntest\nABC123\ncdef123\nhijk123"); 
      textPanel.add(sp1); 
      textPanel.add(sp2); 
      return textPanel; 
    } 

    public JComponent getButtonPanel() { 

      JPanel inner = new JPanel(); 
      inner.setLayout(new FlowLayout());//Modified to standard FlowLayout 
      inner.add(new JButton("Do something")); 
      inner.add(new JButton("Do something different")); 
      inner.add(new JButton("Do something even more different")); 
      return inner; 

    } 

    public static void main(String[] args) { 

      GUITest e = new GUITest(); 
      e.pack(); //Modified setSize(700,500) to pack() 
      e.setVisible(true); 
      e.setResizable(false); 
      e.setDefaultCloseOperation(EXIT_ON_CLOSE); 
      e.setLocationRelativeTo(null); 
    } 
} 
+1

अपडेट किया गया आपका कोड ठीक से इंडेंट करें। – user1803551

4

ग्रिडलायआउट सभी कोशिकाओं को समान आकार देता है, यानी आपके बाहरी लेआउट 3 पंक्तियों और 1 कॉलम के साथ एक ही आकार के 3 कोशिकाओं को बनाता है।

इसके बजाय, अपने बाहरी कंटेनर के लिए BorderLayout का उपयोग करें और बाधाओं BorderLayout.NORTH, BorderLayout.CENTER और BorderLayout.SOUTH के साथ शीर्ष, मध्य और निचले फलक जोड़ें क्रमशः

7

आप कुछ इस तरह की कोशिश कर सकते:

import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import java.awt.*; 

public class Example { 

    public static void main(String[] args) { 

     JFrame jFrame = new JFrame(); 
     jFrame.setTitle("Testing Title"); 
     jFrame.setLocationRelativeTo(null); 

     JPanel mainPanel = new JPanel(new BorderLayout()); 
     mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 

     JPanel listPanel = new JPanel(new GridLayout(0, 2, 10, 0)); 

     JPanel leftListPanel = new JPanel(new BorderLayout(0, 10)); 
     JLabel leftLabel = new JLabel("Left value:"); 
     JTextArea leftTextArea = new JTextArea("Hello Hello Hello\nTesting!\ntest"); 
     JScrollPane leftScrollPane = new JScrollPane(leftTextArea); 
     leftListPanel.add(leftLabel, BorderLayout.NORTH); 
     leftListPanel.add(leftScrollPane, BorderLayout.CENTER); 

     JPanel rightListPanel = new JPanel(new BorderLayout(0, 10)); 
     JLabel rightLabel = new JLabel("Right value:"); 
     JTextArea rightTextArea = new JTextArea("Hello Hello Hello\nTesting!\ntest"); 
     JScrollPane rightScrollPane = new JScrollPane(rightTextArea); 
     rightListPanel.add(rightLabel, BorderLayout.NORTH); 
     rightListPanel.add(rightScrollPane, BorderLayout.CENTER); 

     listPanel.add(leftListPanel); 
     listPanel.add(rightListPanel); 
     mainPanel.add(listPanel, BorderLayout.CENTER); 

     JPanel buttonsPanel = new JPanel(new BorderLayout()); 
     buttonsPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); 
     buttonsPanel.add(new JButton("Do something"), BorderLayout.WEST); 
     buttonsPanel.add(new JButton("Do something different"), BorderLayout.CENTER); 
     buttonsPanel.add(new JButton("Do something even more different"), BorderLayout.EAST); 
     mainPanel.add(buttonsPanel, BorderLayout.SOUTH); 

     jFrame.setContentPane(mainPanel); 
     jFrame.pack(); 
     jFrame.setVisible(true); 
    } 
} 

स्पष्टीकरण:

सबसे पहले मैं एक BorderLayout के साथ एक मुख्य JPanel बनाया। यह JPanel क्षैतिज रूप से विभाजित किया जाएगा, CENTRE घटक अन्य JPanel होगा जिसमें टेक्स्ट क्षेत्र और लेबल होंगे, और SOUTH घटक JPanel बटन होंगे।

JPanel कि पाठ क्षेत्रों में शामिल है आसानी से खड़ी विभाजित एक GridLayout दिया जाता है, जिससे कि यह हो सकता है, और भी कुछ रिक्ति जोड़ने के लिए 10 के hgap दिया जाता है।

बाएं और दाएं JPanels जो दोनों में डाल दिए गए हैं वे दोनों समान हैं। उनके पास BorderLayout है जिसमें vgap स्पेसिंग जोड़ने के लिए है। NORTH घटक JLabel है और CENTRE घटक JScrollPane है जिसमें JTextArea है।

अंत में, मुख्य JPanel की SOUTH घटक एक और JPanel जो एक BorderLayout फिर से दिया जाता है। तीन JButton एस WEST, CENTRE और EAST के अनुसार आवंटित विशेषताओं के साथ जोड़े गए हैं।

कुल परिणाम लगता है:

enter image description here

+0

स्क्रॉल पैन में अपने टेक्स्ट क्षेत्र जोड़ें। – user1803551

+0

@ user1803551 धन्यवाद, – explv

संबंधित मुद्दे