2013-12-10 276 views
0

我有以下程序。当我改变列的大小,并点击任何中心,左侧或右侧对齐按钮,如果列的大小太高,那么一切都会改变。我希望窗户的尺寸增加,并且面板的布置没有任何变化。 有人可以提出一些见解。调整窗口大小

package workingwithjtextfields; 

import java.awt.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.*; 
import javax.swing.border.*; 


public class WorkingwithJTextFields extends JFrame { 

    private JTextField jtfMessage = new JTextField(100); 
    private JTextField jtfColumn = new JTextField(5); 
    private JRadioButton jrbLeft, jrbCenter, jrbRight; 

    public static void main(String[] args) //Main program begins here. 
    { 
     JFrame frame = new WorkingwithJTextFields();//Instantiating an object. 
     //frame.pack(); 
     frame.setTitle("Exercise 17.11");//Setting the frame title. 
     frame.setSize(500, 110);//Setting the size. 
     frame.setLocationRelativeTo(null);//Setting the location. 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Default closing options. 
     frame.setVisible(true);//Setting visibility to true. 

    }//End of main program 

    public WorkingwithJTextFields() { 

     // jtfMessage.setColumns(100); 
     final JPanel parent = new JPanel(); 
     parent.setLayout(new GridLayout(2, 1, 3, 3)); 

     final JPanel p1 = new JPanel(); 
     p1.setLayout(new FlowLayout(FlowLayout.CENTER, 30, 0)); 

     p1.add(new JLabel("TextField", SwingConstants.CENTER)); 

     jtfMessage = new JTextField("Type anything", SwingConstants.RIGHT); 
     jtfMessage.setHorizontalAlignment(SwingConstants.CENTER); 
     jtfMessage.setColumns(30); 
     p1.add(jtfMessage); 

     parent.add(p1); 

     JPanel jpRadioButtons = new JPanel(); 
     jpRadioButtons.setLayout(new GridLayout(1, 3)); 
     jpRadioButtons.add(jrbLeft = new JRadioButton("Left")); 
     jpRadioButtons.add(jrbCenter = new JRadioButton("Center")); 
     jpRadioButtons.add(jrbRight = new JRadioButton("Right")); 
     jpRadioButtons.setBorder(new TitledBorder("Horizontal Border")); 

     final JPanel p2 = new JPanel(); 
     p2.setLayout(new GridLayout(1, 2, 1, 1)); 

     p2.add(jpRadioButtons); 

     JPanel p3 = new JPanel(); 
     p3.setLayout(new GridLayout(1, 1, 1, 1)); 
     p3.add(new JLabel("Column Size")); 

     jtfColumn = new JTextField("60", SwingConstants.RIGHT); 
     jtfColumn.setHorizontalAlignment(SwingConstants.CENTER); 

     p3.add(jtfColumn); 
     Border lineBorder = new LineBorder(Color.LIGHT_GRAY, 1); 
     p3.setBorder(lineBorder); 
     p2.add(p3); 
     parent.add(p2); 
     add(parent); 

     jrbLeft.addActionListener(
       new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         jtfMessage.setHorizontalAlignment(SwingConstants.LEFT); 
         jrbCenter.setSelected(false); 
         jrbRight.setSelected(false); 
         jtfMessage.setColumns(Integer.parseInt(jtfColumn.getText())); 
         p1.revalidate(); 
         p1.repaint(); 

        } 
       } 
     ); 

     jrbCenter.addActionListener(
       new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         jtfMessage.setHorizontalAlignment(SwingConstants.CENTER); 
         jrbLeft.setSelected(false); 
         jrbRight.setSelected(false); 
         jtfMessage.setColumns(Integer.parseInt(jtfColumn.getText())); 
        } 
       } 
     ); 

     jrbRight.addActionListener(
       new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         jtfMessage.setHorizontalAlignment(SwingConstants.RIGHT); 
         jrbCenter.setSelected(false); 
         jrbLeft.setSelected(false); 
         jtfMessage.setColumns(Integer.parseInt(jtfColumn.getText())); 
        } 

       } 
     ); 

    } 

} 

回答

0

当您更改字段的列大小,您将需要调用pack领域的窗口,以使其将窗口调整为它所包含

例如组件的首选大小...

jrbLeft.addActionListener(
     new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       jtfMessage.setHorizontalAlignment(SwingConstants.LEFT); 
       jrbCenter.setSelected(false); 
       jrbRight.setSelected(false); 
       jtfMessage.setColumns(Integer.parseInt(jtfColumn.getText())); 
       p1.revalidate(); 
       SwingUtilities.getWindowAncestor(p1).pack(); 
       SwingUtilities.getWindowAncestor(p1).setLocationRelativeTo(null); 
      } 
     } 
); 
+0

即将提到包,但你在我之前做过; Kudos! – 2013-12-10 01:37:09

+0

@Shingetsu这里希望它有效;)(其实我测试过它,但你总是用这些东西交叉你的手指;)) – MadProgrammer

+0

谢谢你们..它工作得很好。 – user2918968

0

Java应用程序使用布局管理来控制这一点,如果你想控制它100%,你将不得不使用一个非标准的组件如NetBeans的AbsoluteLayout,但随后你将不得不包括它的.jar您应用。