java setbounds无效_为什么即使将setLayout()设置为null后,setBounds()方法也不起作用? - java...

通常setBounds()方法将被调用的对象放置在指定的位置并以指定的大小放置。

我创建了一个JFrame类,并通过设置setLayout(null)演示了其在按钮上的工作。

然后,我创建了一个扩展JPanel的类,并在其中添加了一些组件。

这些组件的界限是在方法内部设置的。

此类的对象包含在扩展JFrame的类中。

然后,此对象调用setBound()方法。

但是结果没有显示JPanel扩展类中的组件。

cde片段如下。

class Administrator extends JFrame implements ActionListener

{

public Administrator()

{

setTitle("Administration");

setSize(500,500);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLayout(null);

JButton newbutton=new JButton(" New.. ");

newbutton.addActionListener(this);

add(newbutton);

newbutton.setBounds(100,100,100,25);

setVisible(true);

public static void main(String arg[])

{

new Administrator();

}

public void actionPerformed(ActionEvent ae)

{

String act=(String)ae.getActionCommand();

if(act.equals("New Registry..")||act.equals(" New.. "))

{

regPanel rgpnl=new regPanel();

Dimension sz;

sz=rgpnl.getPreferredSize();

rgpnl.setBounds(800,800,sz.width,sz.height);

rgpnl.arrangeComponents();

add(rgpnl);

repaint();

setVisible(true);

}

}

class regPanel extends JPanel

{

Label namelab;

JTextField name;

JButton do_register;

public regPanel()

{

//Container = get ();

setLayout(null);

namelab=new Label("Name :");

name=new JTextField(20);

add(namelab);

add(name);

add(do_register);

}

public void arrangeComponents()

{

Dimension size;

size=namelab.getPreferredSize();

namelab.setBounds(20,10,size.width,size.height);

name.getPreferredSize();

name.setBounds(150,10,size.width,size.height);

do_register.setBounds(10,10,size.width,size.height);

repaint();

}

}

参考方案

除了代码中的某些可疑部分(例如缺少大括号,空指针和此类错误)之外,您的代码创建的组件的大小为(800,800),而接口的大小仅为500x500 px。这将使组件不可见。将组件置于距窗口原点较小的偏移量,它们将显示。 (我对此进行了测试,并对代码进行了一些修改,例如针对setLayout(null)进行调用的顺序。此调用似乎应该在正确的时间进行,否则这些组件将不会对我显示。)

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

好的,以下是一个采用 `btnBin.setBounds` 的 Java 计算器示例代码,支持 2、8、10 进制: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Calculator extends JFrame implements ActionListener { private JTextField tfNum1, tfNum2, tfResult; private JLabel lblNum1, lblNum2, lblResult; private JButton btnAdd, btnSub, btnMul, btnDiv; private JButton btnBin, btnOct, btnDec; public Calculator() { setTitle("计算器"); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); lblNum1 = new JLabel("操作数1:"); lblNum1.setBounds(20, 20, 80, 20); add(lblNum1); tfNum1 = new JTextField(); tfNum1.setBounds(100, 20, 100, 20); add(tfNum1); lblNum2 = new JLabel("操作数2:"); lblNum2.setBounds(20, 60, 80, 20); add(lblNum2); tfNum2 = new JTextField(); tfNum2.setBounds(100, 60, 100, 20); add(tfNum2); lblResult = new JLabel("结果:"); lblResult.setBounds(20, 100, 80, 20); add(lblResult); tfResult = new JTextField(); tfResult.setBounds(100, 100, 100, 20); tfResult.setEditable(false); add(tfResult); btnAdd = new JButton("+"); btnAdd.setBounds(20, 140, 50, 30); btnAdd.addActionListener(this); add(btnAdd); btnSub = new JButton("-"); btnSub.setBounds(80, 140, 50, 30); btnSub.addActionListener(this); add(btnSub); btnMul = new JButton("*"); btnMul.setBounds(140, 140, 50, 30); btnMul.addActionListener(this); add(btnMul); btnDiv = new JButton("/"); btnDiv.setBounds(200, 140, 50, 30); btnDiv.addActionListener(this); add(btnDiv); btnBin = new JButton("二进制"); btnBin.setBounds(20, 180, 80, 30); btnBin.addActionListener(this); add(btnBin); btnOct = new JButton("八进制"); btnOct.setBounds(110, 180, 80, 30); btnOct.addActionListener(this); add(btnOct); btnDec = new JButton("十进制"); btnDec.setBounds(200, 180, 80, 30); btnDec.addActionListener(this); add(btnDec); } public void actionPerformed(ActionEvent e) { int num1 = Integer.parseInt(tfNum1.getText().trim(), 10); int num2 = Integer.parseInt(tfNum2.getText().trim(), 10); int result = 0; if (e.getSource() == btnAdd) { result = num1 + num2; } else if (e.getSource() == btnSub) { result = num1 - num2; } else if (e.getSource() == btnMul) { result = num1 * num2; } else if (e.getSource() == btnDiv) { if (num2 == 0) { JOptionPane.showMessageDialog(this, "除数不能为0!", "错误", JOptionPane.ERROR_MESSAGE); return; } result = num1 / num2; } else if (e.getSource() == btnBin) { tfNum1.setText(Integer.toBinaryString(num1)); tfNum2.setText(Integer.toBinaryString(num2)); } else if (e.getSource() == btnOct) { tfNum1.setText(Integer.toOctalString(num1)); tfNum2.setText(Integer.toOctalString(num2)); } else if (e.getSource() == btnDec) { tfNum1.setText(Integer.toString(num1)); tfNum2.setText(Integer.toString(num2)); } tfResult.setText(Integer.toString(result)); } public static void main(String[] args) { Calculator calculator = new Calculator(); calculator.setVisible(true); } } ``` 该计算器采用了 `btnBin.setBounds` 方法设置按钮的位置和大小。用户输入操作数后,可以通过选择不同的进制按钮来将操作数转换成对应的进制。用户选择计算操作后,程序会将操作数转换成十进制并进行计算,最后将结果显示在结果文本框中。如果用户选择除法操作并且除数为0,程序会弹出错误对话框提示用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值