删除JTable中的JCombobox边框 [英] Remove JCombobox border inside JTable

查看:149
本文介绍了删除JTable中的JCombobox边框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已从 JComoboBox 中删除​​了箭头按钮,使其看起来像 JTextField 并将其添加为CellEditor中。目的是创建一个AutoSuggest(不是自动完成)JTable单元格。

I have removed the arrow button from the JComoboBox to make it look like a JTextField and added it as a celleditor. The purpose is it create an AutoSuggest(not AutoComplete) JTable cell.

On这样做边框有点看起来很烦人。如何更改边框使其看起来像文本边框在右边。我试过去除边框创建的线条边框。但它没有移除蓝色边框。

On Doing that the border kinda looks irking.How to change the border to make it look like textfield border on the right. I have tried removing the border created line border. But its not removing the blueish border.

使用Nimbus UI。

Using Nimbus UI.

MCVE解决问题

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class Sample extends JFrame {

    public Sample() {
        init();
    }

    private void init() {
        JTable table = new JTable(5, 5);
        DefaultCellEditor cellEditor = new DefaultCellEditor(new EditorCombo());
        cellEditor.setClickCountToStart(2);
        table.getColumnModel().getColumn(0)
                .setCellEditor(cellEditor);
        table.setRowHeight(30);
        table.setCellSelectionEnabled(true);
        add(new JScrollPane(table));
    }

    public static void main(String[] args) {
        setUpUI("Nimbus");
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                Sample samp = new Sample();
                samp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                samp.setTitle("Table Test");
                samp.pack();
                samp.setLocationRelativeTo(null);
                samp.setVisible(true);
            }
        });
    }

    private static void setUpUI(String ui) {
        try {
            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if (ui.equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            Logger.getLogger(Sample.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    class EditorCombo extends JComboBox {

        public EditorCombo() {
            setEditable(true);
            for (int i = 0; i < 10; i++) {
                addItem("Sample" + i);
            }
            setUI(new javax.swing.plaf.synth.SynthComboBoxUI() {
                @Override
                protected JButton createArrowButton() {
                    JButton button = new JButton() {
                        @Override
                        public int getWidth() {
                            return 0;
                        }
                    };
                    button.setBorder(BorderFactory.createEmptyBorder());
                    button.setVisible(false);
                    return button;
                }

                @Override
                public void configureArrowButton() {
                }
            });
        }

    }
}


推荐答案


使用Nimbus UI

Using Nimbus UI

也许这会对你有所帮助: Nimbus默认值(Java™教程>使用JFC / Swing创建GUI>修改外观和感觉)

Maybe this will help you: Nimbus Defaults (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)


  • TextField [Focused] .borderPainter

  • TextField [Enabled] .borderPainter

  • ComboBox:\ComboBox .textField \[Enabled] .backgroundPainter

  • ComboBox:\ComboBox.textField \[Selected] .backgroundPainter

  • TextField[Focused].borderPainter
  • TextField[Enabled].borderPainter
  • ComboBox:\"ComboBox.textField\"[Enabled].backgroundPainter
  • ComboBox:\"ComboBox.textField\"[Selected].backgroundPainter
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

public class Sample2 extends JFrame {
  public Sample2() {
    init();
  }

  private void init() {
    JTable table = new JTable(5, 5);
    DefaultCellEditor cellEditor = new DefaultCellEditor(new EditorCombo());
    cellEditor.setClickCountToStart(2);
    table.getColumnModel().getColumn(0).setCellEditor(cellEditor);
    table.setRowHeight(30);
    table.setCellSelectionEnabled(true);
    add(new JScrollPane(table));
  }

  public static void main(String[] args) {
    setUpUI("Nimbus");
    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {
        Sample2 samp = new Sample2();
        samp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        samp.setTitle("Table Test");
        samp.pack();
        samp.setLocationRelativeTo(null);
        samp.setVisible(true);
      }
    });
  }

  private static void setUpUI(String ui) {
    try {
      for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if (ui.equals(info.getName())) {
          UIManager.setLookAndFeel(info.getClassName());
          break;
        }
      }
    } catch (ClassNotFoundException | InstantiationException
             | IllegalAccessException | UnsupportedLookAndFeelException ex) {
      Logger.getLogger(Sample2.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

class EditorCombo extends JComboBox<String> {
  public EditorCombo() {
    super();
    setEditable(true);
    for (int i = 0; i < 10; i++) {
      addItem("Sample" + i);
    }
  }
  @Override public void updateUI() {
    //super.updateUI();
    setUI(new javax.swing.plaf.synth.SynthComboBoxUI() {
      @Override
      protected JButton createArrowButton() {
        JButton button = new JButton() {
          @Override
          public int getWidth() {
            return 0;
          }
        };
        button.setBorder(BorderFactory.createEmptyBorder());
        button.setVisible(false);
        return button;
      }
      @Override
      public void configureArrowButton() {
      }
    });
    UIDefaults d = new UIDefaults();
//     putClientProperty("Nimbus.Overrides", d);
//     putClientProperty("Nimbus.Overrides.InheritDefaults", false);
//     JComponent c = (JComponent) getEditor().getEditorComponent();
//     c.putClientProperty("Nimbus.Overrides", d);
//     c.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
//     c.setBorder(BorderFactory.createLineBorder(Color.BLACK));

    Painter<JComponent> emptyPainter = new Painter<JComponent>() {
      @Override public void paint(Graphics2D g, JComponent c, int w, int h) {
        /* Empty painter */
      }
    };
    d.put("TextField.borderPainter", emptyPainter);
    d.put("TextField[Enabled].borderPainter", emptyPainter);
    d.put("TextField[Focused].borderPainter", emptyPainter);
    d.put("ComboBox:\"ComboBox.textField\"[Enabled].backgroundPainter", emptyPainter);
    d.put("ComboBox:\"ComboBox.textField\"[Selected].backgroundPainter", emptyPainter);
    d.put("ComboBox[Editable+Focused].backgroundPainter", emptyPainter);
    putClientProperty("Nimbus.Overrides", d);
    JComponent c = (JComponent) getEditor().getEditorComponent();
    c.putClientProperty("Nimbus.Overrides", d);
    c.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  }
}

这篇关于删除JTable中的JCombobox边框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆