【问题标题】:Custom Bean Class for GUI Component in NetbeansNetbeans 中 GUI 组件的自定义 Bean 类
【发布时间】:2014-11-10 16:42:51
【问题描述】:

好的,所以我的教授发布了一个作业,但是我们应该使用的参考代码让我感到困惑。他制作了一个 JFrame,并在该 Jframe 中放入了一个按钮,但该按钮的 beanclass 是扩展 JButton 的子类 JHoverButton.Java。当我尝试在我的代码中这样做时,我无法让 Bean 类成为我自己的子类。我已经尝试过自定义创建代码,我已经尝试过绑定并且我已经查看了堆栈溢出,但我真的找不到答案。任何帮助将不胜感激!

这是我老师发的

这就是我卡住的地方。

任何帮助将不胜感激,谢谢!

BeanProjectTest.Java 的源代码:

package beanproject;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.metal.*;


 public class BeanProjectTest extends javax.swing.JFrame {

/**
 * Creates new form BeanProjectTest
 */
public BeanProjectTest() {
    initComponents();
    try{
        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        //UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
        MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
        SwingUtilities.updateComponentTreeUI(this);

    }catch(Exception e){
        JOptionPane.showMessageDialog(this, e.toString());
    }
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jColorChooser1 = new javax.swing.JColorChooser();
    jHoverButton1 = new beanproject.JHoverButton();
    jIntegerField1 = new beanproject.JIntegerField();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Bean Project Test");

    jHoverButton1.setText("jHoverButton1");

    jIntegerField1.setText("jIntegerField1");

    jButton1.setText("jButton1");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(38, 38, 38)
            .addComponent(jHoverButton1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(53, 53, 53))
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jIntegerField1, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(43, 43, 43)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jHoverButton1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jButton1))
            .addGap(72, 72, 72)
            .addComponent(jIntegerField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(241, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */

    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new BeanProjectTest().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JColorChooser jColorChooser1;
private beanproject.JHoverButton jHoverButton1;
private beanproject.JIntegerField jIntegerField1;
// End of variables declaration                   

}

JHoverButton.Java 的源代码:

public class JHoverButton extends JButton implements MouseListener{

public JHoverButton(){
    super();
    initialize();
}

private void initialize(){
    setBorderPainted(false);
    addMouseListener(this);
}

public JHoverButton(String text){
    super(text);
    initialize();
}

public JHoverButton(String text, Icon icon){
    super(text, icon);
    initialize();
}

public void setEnabled(boolean enabled){
    super.setEnabled(enabled);
    if(enabled){
        if(isBorderPainted()){
            setBorderPainted(false);
            repaint();
        }
    }
}

@Override
public void mouseClicked(MouseEvent me) {

}

@Override
public void mousePressed(MouseEvent me) {

}

@Override
public void mouseReleased(MouseEvent me) {

}

@Override
public void mouseEntered(MouseEvent me) {
   if(!isBorderPainted() && isEnabled()){
       setBorderPainted(true);
       repaint();
   }
}

@Override
public void mouseExited(MouseEvent me) {
    if(isBorderPainted()){
        setBorderPainted(false);
        repaint();
    }
}

}

【问题讨论】:

  • 完成,我粘贴了 JHoberButton.Java 和 BeanProjectTest.Java 的代码
  • 对于公共类 JHoverButton 扩展 JButton 实现 MouseListener{ 以在 ButtonModel 中实现的方法中搜索而不是打扰鼠标事件

标签: java swing user-interface netbeans


【解决方案1】:

作为初学者请注意,如果您手动编写 GUI 而不是使用 GUI 构建器,添加第三方组件会更容易:

JPanel panel = new JPanel();
panel.add(new JHoverButton("Hello!"));
...
frame.add(panel);

话虽如此,您需要添加一个新 Bean 并指定组件的完整路径,而不是从调色板添加 JButton:packagename.ComponentName

1。选择选择 Bean 选项

2。通过插入类的完整路径来选择合适的bean

3。放置 JHoverButton 组件

4。检查 Bean 的属性

【讨论】:

  • 非常感谢!我真的很感谢你抽出时间来帮助我! :D
【解决方案2】:
  1. 点击 JHoverButton.java 文件
  2. CTRL+C
  3. 在设计器视图中单击您的 JPanel
  4. CTRL+V

来源:http://wiki.netbeans.org/FaqFormUsingCustomComponent

【讨论】:

  • 我不能,那部分是生成的代码,不可编辑。与底部的变量声明相同。
  • hmmm...点击左键复制。
  • 这创建了一个名为 jHoverButton2 的新变量,具有相同的属性。我不明白我的教授是如何开始使用子类而不是 JButton 的。
  • 我想这会起作用,但我的老师说要创建一个 Jtextfield 的子类,将输入限制为仅十进制数字,所以我想看看是否有办法在不复制和粘贴的情况下做到这一点他的东西你知道吗?
  • 所以创建 JTextField 和 CTRL+C 并将您的 TextField 粘贴到窗格中,问题出在哪里?
猜你喜欢
  • 2014-01-12
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多