我有带有渐变背景和圆角的自定义 JButton 类。我应该覆盖 setText() 还是应该怎么做才能在上面显示文本?setText("text") 没有效果。
UPD:我已经尝试过 setContentAreaFilled(false),就像 MadProgrammer 建议的那样,它解决了这个问题,但又出现了另一个问题。我在不同的选项卡上有这样的按钮,当它们被重新绘制时,它们会出现几毫秒,就像它们都在同一个选项卡上一样。更新的代码在这里:
public class DarkGradientButton extends JButton {
private Color startColor = new Color(178, 178, 178);
private Color endColor = new Color(131, 131, 131);
private Color disstartColor = new Color(252, 252, 252);
private Color disendColor = new Color(221, 221, 221);
private Color enstartColor = new Color(178, 178, 178);
private Color enendColor = new Color(131, 131, 131);
public DarkGradientButton(String text, ImageIcon ii) {
super(text, ii);
this.setContentAreaFilled(false);
}
public DarkGradientButton() {
super();
this.setContentAreaFilled(false);
}
@Override
protected void paintComponent( Graphics g )
{
g.setColor(new Color(246,250,245));
int h = getHeight();
int w = getWidth();
GradientPaint gradientPaint = new GradientPaint( 0 , 0 , startColor , 0 , h , endColor );
int[] x = {0, 1, w-1, w, w, w-1, w-2, 2, 1, 0};
int[] y = {1, 0, 0, 1, h-3, h-2, h-1, h-1, h-2, h-3};
Graphics2D graphics2D = (Graphics2D)g;
graphics2D.setPaint( gradientPaint );
graphics2D.fillPolygon(x, y, x.length);
graphics2D.setColor(this.getForeground());
super.paintComponent( g );
}
public void makeDisable() {
startColor = disstartColor;
endColor = disendColor;
Graphics g = this.getGraphics();
paintComponent(g);
this.repaint();
}
public void makeEnable() {
startColor = enstartColor;
endColor = enendColor;
Graphics g = this.getGraphics();
paintComponent(g);
this.repaint();
}
}
选项卡上的按钮(这是 Netbeans 为我生成的):
callStartButton = new gui.DarkGradientButton(language[25], new ImageIcon("pic\\call-start.png"));
callStartButton.setBorder(null);
callStartButton.setForeground(new java.awt.Color(255, 255, 255));
callStartButton.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N
callStartButton.setPreferredSize(new java.awt.Dimension(95, 23));
callStartButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
callStartButtonActionPerformed(evt);
}
});
org.jdesktop.layout.GroupLayout callPanelLayout = new org.jdesktop.layout.GroupLayout(callPanel);
callPanel.setLayout(callPanelLayout);
callPanelLayout.setHorizontalGroup(
callPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(callPanelLayout.createSequentialGroup()
.add(callPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(callPanelLayout.createSequentialGroup()
.add(19, 19, 19)
.add(callStartButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
.add(callStopButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(callPanelLayout.createSequentialGroup()
.addContainerGap()
.add(numberLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 63, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
.add(callPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(numberExampleLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 128, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(callPanelLayout.createSequentialGroup()
.add(codeField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 47, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(numberField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 89, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
.add(callPanelLayout.createSequentialGroup()
.add(25, 25, 25)
.add(callProgressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 190, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(14, Short.MAX_VALUE))
);
callPanelLayout.setVerticalGroup(
callPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(callPanelLayout.createSequentialGroup()
.addContainerGap()
.add(callPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(numberField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(codeField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(numberLabel))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(numberExampleLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 14, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(18, 18, 18)
.add(callPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(callStartButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(callStopButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 8, Short.MAX_VALUE)
.add(callProgressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(13, 13, 13))
);
org.jdesktop.layout.GroupLayout testPanelLayout = new org.jdesktop.layout.GroupLayout(testPanel);
testPanel.setLayout(testPanelLayout);
testPanelLayout.setHorizontalGroup(
testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(testPanelLayout.createSequentialGroup()
.add(8, 8, 8)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(testPanelLayout.createSequentialGroup()
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(ascii, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.add(0, 0, 0)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(hex, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jScrollPane9)))
.add(lightGradientPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(testPanelLayout.createSequentialGroup()
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(testPanelLayout.createSequentialGroup()
.add(testManagementPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, 0)
.add(testResultPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(testPanelLayout.createSequentialGroup()
.add(testModemHeaderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, 0)
.add(testResultHeaderPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.add(0, 0, 0)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(callHeaderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(callPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(modemModelPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(modemHeaderPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(modemModelHeaderPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(modemParamsPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.add(simPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 240, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(testModemHeaderPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 240, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(17, 17, Short.MAX_VALUE))
.add(testPanelLayout.createSequentialGroup()
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, testPanelLayout.createSequentialGroup()
.add(10, 10, 10)
.add(userGuideButton5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(irzLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 117, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(testPanelLayout.createSequentialGroup()
.add(309, 309, 309)
.add(saveASCIILogButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
testPanelLayout.setVerticalGroup(
testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(testPanelLayout.createSequentialGroup()
.add(15, 15, 15)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(testPanelLayout.createSequentialGroup()
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(testModemHeaderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(testResultHeaderPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(callHeaderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(testResultPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(testManagementPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(callPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(22, 22, 22)
.add(lightGradientPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, 0)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 271, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jScrollPane9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 271, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(hex, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(org.jdesktop.layout.GroupLayout.TRAILING, ascii, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.add(testPanelLayout.createSequentialGroup()
.add(modemModelHeaderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, 0)
.add(modemModelPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, 0)
.add(modemHeaderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, 0)
.add(modemParamsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(testModemHeaderPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 0, 0)
.add(simPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(testPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(testPanelLayout.createSequentialGroup()
.add(saveASCIILogButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(userGuideButton5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(org.jdesktop.layout.GroupLayout.TRAILING, testPanelLayout.createSequentialGroup()
.add(0, 34, Short.MAX_VALUE)
.add(irzLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 61, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap())))
);
jTabbedPane1.addTab("tab1", testPanel);
jLayeredPane1.add(jTabbedPane1, javax.swing.JLayeredPane.DEFAULT_LAYER);
jTabbedPane1.getAccessibleContext().setAccessibleName("");
getContentPane().add(jLayeredPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 5, -1, 660));