java tooltips_JAVA ToolTip简单使用

TOOLTIP的使用

JToolTip是指当鼠标停留在一个控件上时显示的一个包含相关信息的方框,其中可以使用setToolTipText()方法来设置其中的内容,这里可以使用HTML语言来实现更多的效果(换行、表格、图片等),显示内容还是很多的。下面是JDK源代码:

public void setToolTipText(String text) {

String oldText = getToolTipText();

putClientProperty(TOOL_TIP_TEXT_KEY, text);

ToolTipManager toolTipManager = ToolTipManager.sharedInstance();

if (text != null) {

if (oldText == null) {

toolTipManager.registerComponent(this);

}

} else {

toolTipManager.unregisterComponent(this);

}

}

从上面代码可以看出,这里有一个putClientProperty方法,用来设置TOOL_TIP_TEXT_KEY的属性值为text(这好像是个哈希表的样子)。oldText先从getToolTipText()方法中取,如果取到的是空的(null)并且传进来的text不为空,就注册给这个组件一个ToolTip。

这个控件是非常有用的,其中String getToolTipText(MouseEvent)是每个JComponent都实现的方法,用来获取JToolTip控件显示的内容,此方法默认JDK代码为:

public String getToolTipText() {

return (String)getClientProperty(TOOL_TIP_TEXT_KEY);

}

就是从TOOL_TIP_TEXT_KEY属性把值取出来作为返回值。在ToolTipManager的show方法中,就有这样一句:

toolTipText = insideComponent.getToolTipText();

这样就说明了如果组件重载了getToolTipText()方法,就可以在显示ToolTip的时候指定内容了。如果要在控件的不同位置显示不同的ToolTip,要重载public String getToolTipText(MouseEvent event)方法,下面是ToolTipManager类处理鼠标移动的代码:

public void mouseMoved(MouseEvent event) {

if (tipShowing) {

checkForTipChange(event);

}

else if (showImmediately) {

JComponent component = (JComponent)event.getSource();

toolTipText = component.getToolTipText(event);

if (toolTipText != null) {

preferredLocation = component.getToolTipLocation(event);

mouseEvent = event;

insideComponent = component;

exitTimer.stop();

showTipWindow();

}

}

else {

// Lazily lookup the values from within insideTimerAction

insideComponent = (JComponent)event.getSource();

mouseEvent = event;

toolTipText = null;

enterTimer.restart();

}

}

加亮显示的就是使用了重载方法的地方(还有其他一些地方,这里没全列)。

上面的逻辑可能有些混乱,主要是说几个类之间的关系(JComponent、JToolTip和ToolTipManager三个类),如果要利用SWING显示ToolTip,可以对上面的类方法进行重载或对类进行继承来达到自己所需要的效果。例如:

private class TipPanel extends JPanel

{

public TipPanel()

{

this.setSize(300, 300);

this.setBorder(new javax.swing.border.SoftBevelBorder (javax.swing.border.BevelBorder.RAISED));

}

public String getToolTipText(MouseEvent event)

{

return event.getPoint().toString();

}

}

就重载了JComponent的getToolTipText(MouseEvent)方法,这样就可以在此JPanel中移动鼠标的时候看到提示框中的变化了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成曲线图可以使用Java中的图形库,比如JFreeChart或者Chart.js。这些库提供了许多API可以用来生成各种类型的图表,包括曲线图。 以下是一个使用JFreeChart生成曲线图的示例代码: ```java import java.awt.Color; import java.awt.Dimension; import java.awt.GradientPaint; import java.awt.Point; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JFrame; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.time.Year; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.GradientPaintTransformType; import org.jfree.ui.RectangleInsets; import org.jfree.ui.RefineryUtilities; import org.jfree.ui.StandardGradientPaintTransformer; public class LineChartDemo extends ApplicationFrame { public LineChartDemo(String title) { super(title); JFreeChart chart = createChart(); ChartPanel panel = new ChartPanel(chart); panel.setPreferredSize(new Dimension(500, 270)); setContentPane(panel); } private JFreeChart createChart() { TimeSeries series = new TimeSeries("Random Data"); Date date = new Date(); for (int i = 0; i < 100; i++) { date = new Date(date.getTime() + 1000 * 60 * 60 * 24); series.add(new Year(date), Math.random() * 100); } TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(series); JFreeChart chart = ChartFactory.createXYLineChart( "Line Chart Demo", // chart title "Time", // x axis label "Value", // y axis label dataset, // data PlotOrientation.VERTICAL, true, // include legend true, // tooltips false // urls ); chart.setBackgroundPaint(Color.white); XYPlot plot = (XYPlot) chart.getPlot(); plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(true); XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); renderer.setSeriesLinesVisible(0, true); renderer.setSeriesShapesVisible(0, false); plot.setRenderer(renderer); DateAxis axis = (DateAxis) plot.getDomainAxis(); axis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy")); NumberAxis axis2 = (NumberAxis) plot.getRangeAxis(); axis2.setNumberFormatOverride(new DecimalFormat("#0.0")); GradientPaint gp0 = new GradientPaint( 0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(0, 0, 64) ); GradientPaint gp1 = new GradientPaint( 0.0f, 0.0f, Color.green, 0.0f, 0.0f, new Color(0, 64, 0) ); renderer.setSeriesPaint(0, gp0); renderer.setSeriesPaint(1, gp1); renderer.setGradientPaintTransformer( new StandardGradientPaintTransformer(GradientPaintTransformType.VERTICAL) ); return chart; } public static void main(String[] args) { LineChartDemo demo = new LineChartDemo("Line Chart Demo"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } ``` 这段代码使用JFreeChart库生成随机数据的曲线图。如果你有自己的数据,只需要修改相应的代码即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值