How to configure this graphical interface?

I want to have this:

sketch

I tried this:

// Vertically center formatbp.setLayout (new GridBagLayout()); // formatbp is a JPanel GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = GridBagConstraints.RELATIVE; rbpanel.setLayout(new BoxLayout(rbpanel, BoxLayout.PAGE_AXIS)); // rbpanel is also a JPanel rb = new ButtonGroup(); rbpanel.add(new JLabel("Words are seperated by: ")); rbLinesOrTabs.setSelected(true); rb.add(rbLinesOrTabs); rbpanel.add(rbLinesOrTabs); rbLinesOrTabs.addActionListener(this); rbotherpanel = new JPanel(new FlowLayout()); rb.add(rbOther); rbpanel.add(rbOther); rbOther.addActionListener(this); othercharfield.setEnabled(false); // Is going to be enabled when rbOther gets selected (and disabled again when rbLinesOrTabs is selected again), that is where the actionlisteners are for rbotherpanel.add(othercharfield); rbpanel.add(rbotherpanel); formatbp.add(rbpanel,gbc); formatbp.add(formatb,gbc); // formatb is the button 

(most objects initialized earlier in code)

But this is the result:

result1

What am I doing wrong?

EDIT: I found that I made a mistake here:

 rbpanel.add(rbOther); 

It should have been:

 rbotherpanel.add(rbOther); 

Now I get:

result2

Better, but the other element does not align to the right. (this is a little to the right, as you can see)

+4
source share
3 answers

An all-in-one approach using MigLayout (yes, this is really my current favorite :-)

  MigLayout layout = new MigLayout("debug", "[][]"); JComponent content = new JPanel(layout); content.add(new JLabel("Words are separated by: "), "span"); JRadioButton radio = new JRadioButton("Lines or tabs"); content.add(radio, "wrap"); // split the cell so it will contain both the other button // and the textfield content.add(new JRadioButton("Other:"), "split 2"); // get the right margin of the upper radiobutton int rightMargin = radio.getInsets().right; content.add(new JTextField(), "grow, wrap, " + // remove the gap to the preceding radiobutton "gapx 0, " + // set the padding to compensate the right edge "pad 0 0 0 -" + rightMargin + "px"); content.add(new JButton("Format"), "span, center"); showInFrame(content, "align to button text"); 

The visual result of fine-tuning in a common cell depends on LAF. It looks good on Windows, not so good on Nimbus (the latter looks best without any compensation), so you need to experiment a bit.

+2
source

You add four things to rbPanel, which means you get four lines (which looks like a screenshot example). The other and the text box should be on the same line, so you have to put them in your panel or use GridbagConstraints to correctly position all the components.

Use GridX and GridY instead of RELATIVE, as this makes code easier to understand.

+2
source

Try entering the code,

 public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); frame.setBounds(0, 0, 300, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel formatbp = new JPanel(); formatbp.setLayout (new GridBagLayout()); // formatbp is a JPanel GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = GridBagConstraints.RELATIVE; JPanel rbpanel = new JPanel(); rbpanel.setLayout(new BoxLayout(rbpanel, BoxLayout.Y_AXIS)); // rbpanel is also a JPanel ButtonGroup rb = new ButtonGroup(); rbpanel.add(new JLabel("Words are seperated by: ")); JRadioButton rbLinesOrTabs = new JRadioButton("line or tabs"); rbLinesOrTabs.setSelected(true); rb.add(rbLinesOrTabs); rbpanel.add(rbLinesOrTabs); // rbLinesOrTabs.addActionListener(this); JRadioButton rbOther = new JRadioButton("others:"); JPanel rbotherpanel = new JPanel(); rb.add(rbOther); rbotherpanel.add(rbOther); // rbOther.addActionListener(this); JTextField othercharfield = new JTextField("test", 4); // othercharfield.setColumns(800); // othercharfield.setEnabled(false); // Is going to be enabled when rbOther gets selected (and disabled again when rbLinesOrTabs is selected again), that is where the actionlisteners are for rbotherpanel.add(othercharfield); rbpanel.add(rbotherpanel); formatbp.add(rbpanel,gbc); JButton formatb = new JButton("format"); formatbp.add(formatb,gbc); // formatb is the button frame.getContentPane().add(formatbp); frame.pack(); frame.setVisible(true); } }); } 
0
source

Source: https://habr.com/ru/post/1488503/


All Articles