- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请耐心等待。我正在制作一个 java 控制台,类似于此处找到的 DragonConsole https://code.google.com/p/dragonconsole/ 。一切都按计划进行,但我想实现 DragonConsole 中的一个功能。我想添加让垂直滚动条延伸到框架底部的功能,就像在 DC 中一样。
这是我的。
正如你所看到的,垂直滚动条没有延伸到底部,在我看来,它看起来不专业。但我仍然是一个业余爱好者:D
以下是我的程序的组织方式:输出是 jScrollPane,输入是简单的 jTextField。用户输入内容,然后显示结果输出。
现在,我已经浏览了 DragonConsole 的源代码,它的方式对我来说很复杂,无法告诉我这个东西是如何工作的。据我所知,有一个 jTextArea,用户可以在其中输入命令,但我不知道垂直滚动条的功能如何。
有人可以帮我模仿 DragonConsole 的滚动条吗?
正如您所看到的,DC 上的输入随着垂直滚动条移动。我怎样才能做到这一点。
看不到输入区域...
<小时>小时>“cls”命令调用此函数:
public void clear() {
console.setText("");
print(""); // printing will automatically print the '> ' at the beginning
startIndex = console.getText().length();
}
打印功能:
public void print(String s) { // prints output to the console
console.append(System.lineSeparator() + prompt + s);
}
产生错误:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: bad position: 110
at javax.swing.text.JTextComponent.setCaretPosition(JTextComponent.java:1678) at javax.swing.text.JTextComponent.setCaretPosition(JTextComponent.java:1678)
at Main.Terminal.caretUpdate(Terminal.java:198)
at javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:407)
at javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4417)
at javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4439)
at javax.swing.text.DefaultCaret.fireStateChanged(DefaultCaret.java:798)
at javax.swing.text.DefaultCaret.changeCaretPosition(DefaultCaret.java:1273)
at javax.swing.text.DefaultCaret.handleSetDot(DefaultCaret.java:1169)
at javax.swing.text.DefaultCaret.setDot(DefaultCaret.java:1150)
at javax.swing.text.DefaultCaret$Handler.removeUpdate(DefaultCaret.java:1796)
at javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:260)
at javax.swing.text.AbstractDocument.handleRemove(AbstractDocument.java:623)
at javax.swing.text.AbstractDocument.remove(AbstractDocument.java:591)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:667)
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1718)
at Main.Terminal.doCommand(Terminal.java:218)
at Main.Terminal.keyPressed(Terminal.java:168)
at java.awt.Component.processKeyEvent(Component.java:6463)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2829)
at java.awt.Component.processEvent(Component.java:6282)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
at java.awt.Component.dispatchEventImpl(Component.java:4731)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
这似乎指出了一个问题:
@Ghi đè
public void caretUpdate(CaretEvent e) {
// Ensure that the caret position can only be a valid location
if (e.getDot() < startIndex) {
console.setCaretPosition(startIndex);
Toolkit.getDefaultToolkit().beep();
}
}
<小时>小时>
修复错误的代码
public void clear() {
startIndex = 0; // set it to zero to prevent error from happening
console.setText(""); // this will erase anything on screen, but start the input seqence on the next line
}
再次感谢您的帮助@amurka:)
1 Câu trả lời
查看DragonConsole源码,它支持两种模式:内联和非内联。您看到的第一张滚动条延伸到底部的图片是内联模式下的 DragonConsole。
在此模式下,它只是一个 JTextPane
,然后将其添加到 JScrollPane
。这就是滚动条延伸到底部的原因。然后,它向 JTextPane
添加一个 KeyListener
(keyPressed 方法)和一个 CaretListener
(caretUpdate 函数)。最后,它使用在 InputController
类中实现的自定义 DocumentFilter
来获取您看到的控制台行为。
Tóm lại:
JTextPane
。看看DragonConsole.java中的initializeConsole()
CaretListener
Và KeyListener
添加到该文本 Pane 。查看 DragonConsole.java 中的 caretUpdate()
Và keyPressed()
DocumentFilter
。看InputController.java(实际上设置文档样式是在inializeConsole方法中完成的。)您的操作方式实际上与 DragonConsole 在不处于内联模式时的操作方式相同。在本例中,它使用 JTextPane
作为输出区域,使用 JTextArea
作为输入区域,并且在滚动条方面应该看起来相同。
biên tập:这是一个 super 简单的内联控制台示例。
public class Console extends JPanel implements KeyListener, CaretListener {
private static final String PROMPT = ">>";
private JScrollPane scrollPane;
private JTextArea consoleTextPane;
private int startIndex;
public Console() {
siêu();
// Create a text area
consoleTextPane = new JTextArea();
consoleTextPane.setText(PROMPT);
consoleTextPane.setBorder(null);
// Wraps the text if it goes longer than a line, but NOT on word boundary
// like a normal console
consoleTextPane.setLineWrap(true);
consoleTextPane.setWrapStyleWord(false);
// Set the initial caret position
startIndex = consoleTextPane.getText().length();
consoleTextPane.setCaretPosition(startIndex);
// Add the caret and key listeners
consoleTextPane.addCaretListener(this);
consoleTextPane.addKeyListener(this);
// Scrollbar, always show the vertical one
scrollPane = new JScrollPane(consoleTextPane);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBorder(null);
JPanel panelCenter = new JPanel(new BorderLayout());
panelCenter.setPreferredSize(new Dimension(400, 200));
panelCenter.add(scrollPane, BorderLayout.CENTER);
add(panelCenter, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Console");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.add(new Console());
frame.pack();
frame.setVisible(true);
}
@Ghi đè
public void keyTyped(KeyEvent e) {
// All processing in keyPressed
}
@Ghi đè
public void keyReleased(KeyEvent e) {
// All processing in keyPressed
}
@Ghi đè
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_ENTER:
// ENTER key was pressed
// Get the "Command"
String command = consoleTextPane.getText().substring(startIndex);
if (!command.isEmpty()) {
// TODO: do something with the command
consoleTextPane.append(System.lineSeparator()
+ "Command Entered: " + command);
}
// Update the start index and append a new prompt
consoleTextPane.append(System.lineSeparator() + PROMPT);
startIndex = consoleTextPane.getText().length();
// Consume the ENTER key event so further processing is not
// performed
e.consume();
phá vỡ;
case KeyEvent.VK_BACK_SPACE:
// Make sure this is a valid delete
if (consoleTextPane.getCaretPosition() <= startIndex) {
e.consume();
Toolkit.getDefaultToolkit().beep();
}
phá vỡ;
// TODO: add key presses here as desired
mặc định:
//System.out.println("Unhandled: " + e.getKeyCode());
phá vỡ;
}
}
@Ghi đè
public void caretUpdate(CaretEvent e) {
// Ensure that the caret position can only be a valid location
if (e.getDot() < startIndex) {
consoleTextPane.setCaretPosition(startIndex);
Toolkit.getDefaultToolkit().beep();
}
}
}
关于Java终端-开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23554242/
Tôi cần giải thích rõ hơn. Tôi có thể ghi trực tiếp vào /dev/port để truy cập trực tiếp vào cổng song song và nó hoạt động tốt (tôi có thể bật đèn LED được cắm vào đầu nối cổng). Tuy nhiên, tôi đoán tôi có thể làm điều tương tự với /dev/mem? (http://tld
Theo tình hình hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời được hỗ trợ bằng sự kiện, tài liệu tham khảo hoặc chuyên môn, nhưng câu hỏi này có thể gây ra tranh luận, tranh cãi, thăm dò ý kiến hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi đã học lập trình Windows bằng Visual C++ và Win32 API. Có vẻ như hầu hết các ứng dụng hiện nay đều được phát triển bằng .NET sử dụng C#. Tôi biết rằng hầu hết thời gian không có sự khác biệt giữa mã gốc và mã được quản lý.
Vui lòng chờ. Tôi đang tạo một bảng điều khiển Java tương tự như DragonConsole có tại đây https://code.google.com/p/dragonconsole/. Mọi thứ đang diễn ra theo đúng kế hoạch, nhưng tôi nghĩ
đóng cửa. Câu hỏi này cần tập trung hơn. Hiện tại, câu hỏi này không chấp nhận câu trả lời. Bạn có muốn cải thiện câu hỏi này không? Cập nhật câu hỏi để tập trung vào một vấn đề duy nhất bằng cách chỉnh sửa bài đăng này. Đã đóng 5 năm trước. Cải thiện hàng đợi này
Máy chủ phát triển của Django đang hoạt động lạ. Trình duyệt truy cập vào trang web này sẽ bị kẹt khi tải và mọi nỗ lực thoát khỏi trang web đều không hiệu quả. Khi tôi nhấn control c thì nó có vẻ như bằng nhau nhưng thực tế vẫn đang chạy. Cách duy nhất để thoát khỏi nó là khởi động lại máy tính của tôi, điều này thật bực mình
Tôi đang sử dụng Flash Develop và đã tạo một dự án ActionScript 3.0. Nó khởi động và đọc một tệp xml chứa các url của hình ảnh. Tôi đã giữ url trong cùng thư mục với swf
Có thể phát triển một ngăn xếp BSW của AUTOSAR (ví dụ cho liên lạc CAN) theo các thông số kỹ thuật có sẵn trên trang web của họ không? Không cần mua bất kỳ công cụ đắt tiền nào của nhà cung cấp? Có thể thực hiện những bước nào? Tôi được yêu cầu khám phá khả năng này. Câu trả lời tốt nhất là có và không. dụng cụ
Có ai biết cách ghi đè nội dung của tệp âm thanh vào micrô của iPhone không? Hãy tưởng tượng tình huống bạn đang gọi điện và muốn phát một đoạn âm thanh ngắn để người khác nghe. Do đó, cần phải đặt micrô (phần cứng) ở trạng thái giữ và sử dụng một đại biểu
Tôi gặp vấn đề này khi ứng dụng của tôi gặp lỗi EXC_BAD_ACCESS và bị kẹt/dừng. Tôi đã sử dụng tùy chọn "Xoay trái" và "Xoay phải" của trình mô phỏng để mô phỏng hành vi thay đổi hướng. Nguyên nhân có thể gây ra lỗi này là gì? Vì tôi không nhận được bất kỳ lỗi nào
Tôi có nhiều hơn 1 máy Mac và tôi muốn phát triển trên tất cả chúng. Tôi biết tôi cần phải đồng bộ hóa điện thoại của mình trên mỗi máy, nhưng đó là vấn đề nhỏ nhất của tôi. Có vẻ như tôi không thể chạy ứng dụng trên điện thoại, ngoại trừ những ứng dụng được phát triển trên một trong số chúng. Có phải có
Khi thử nghiệm trên điện thoại, ứng dụng của tôi bị sập tại một thời điểm cụ thể. Bảng điều khiển hiển thị thông báo này Tue Jan 27 15:47:14 unknown SpringBoard[22] : Ứng dụng com.myprof.
Tôi có một trường hợp đang nhận thông tin từ máy chủ. Ứng dụng của tôi có thanh tab và các nút điều hướng. Tôi muốn ứng dụng hiển thị chỉ báo tiến trình và vô hiệu hóa mọi điều khiển khác để người dùng không thể chuyển sang ứng dụng khác trong khi dữ liệu đang được lấy từ máy chủ. Tôi có thể đạt được điều này bằng cách nào? Một phương pháp tôi nghĩ đến
Đôi khi khi tôi cố gắng "xây dựng"/biên dịch mã nguồn đã tải xuống, tôi nhận được cảnh báo sau: ld: cảnh báo: thư mục '/Volumes/Skiiing2/CD/ViewBased/Unknown Path/
Tôi không tìm thấy lời giải thích rõ ràng nào trong tài liệu của Apple về sự khác biệt giữa cấu hình Phát triển và Phân phối. Hiện tại tôi đang phát triển và thử nghiệm trên iPhone của mình bằng cách sử dụng cấu hình phát triển. Tôi đang có kế hoạch phân phối ứng dụng này cho những người thử nghiệm bản beta của mình và tôi muốn biết:
Một trong những thách thức lớn nhất mà tôi gặp phải khi sử dụng SharePoint là nó không phù hợp với môi trường dự án thông thường, ít nhất là môi trường phát triển và sản xuất. Vấn đề tôi gặp phải thường xuyên nhất là nội dung và danh sách được kết hợp chặt chẽ đến mức nếu bạn không thực hiện nội dung trong môi trường sản xuất
Tôi đã thất bại ngay từ bước đầu tiên để chuẩn bị Eclipse (hoàn toàn mới với tôi) cho quá trình phát triển ARM. Tôi đã cài đặt Eclipse trong Windows 10. Tôi nghĩ tôi nên cài đặt xpm nhưng tôi không biết nhập lệnh này vào đâu:
Trước hết, tôi xin nói cho bạn biết - Tôi mới học lập trình. Tôi đang sử dụng VS Code để học C++ và nó không tạo ra trình gỡ lỗi như Dev C++ hoặc CodeBlocks. Tôi đã xem một số video hướng dẫn cách chỉnh sửa tệp json và nó khá phức tạp đối với người mới bắt đầu. Người nào đó
Tôi đã thất bại ngay từ bước đầu tiên để chuẩn bị Eclipse (hoàn toàn mới với tôi) cho quá trình phát triển ARM. Tôi đã cài đặt Eclipse trong Windows 10. Tôi nghĩ tôi nên cài đặt xpm nhưng tôi không biết nhập lệnh này vào đâu:
Tôi đã phát triển một ứng dụng Ionic (kết hợp giữa iOS và Android). Tôi có Xcode 8.3.3 và đã mua gói đăng ký một năm cho Chương trình nhà phát triển của Apple. Tôi không muốn thử nghiệm ứng dụng của mình và
Tôi là một lập trình viên xuất sắc, rất giỏi!